/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package xsystems.propagationModel;

import java.lang.Math;
import java.text.DecimalFormat;
import java.util.ArrayList;

/**
 *
 * @author Karine
 */
public class HataModel extends PropagationModel {

    private String nomeMetodo;
    private double distancia;
    private boolean calculePot_Recebida = false;
    private float Fc;
    private float Hte;
    private float Hre;
    private int numberPoints;
    private ArrayList<Point> Points_HataModel;

    //Para a potencia pathloss
    public HataModel(String nomeMetodo, int distancia, float Fc, float Hte, float Hre, int numberPoints) {

        super(nomeMetodo);
        this.calculePot_Recebida = false;
        this.Fc = Fc; 
        this.distancia = distancia; //Distância Total percorrida
        this.Hte = Hte; 
        this.Hre = Hre;
        this.numberPoints = numberPoints; // Número de pontos considerados nas medições
        Points_HataModel = new ArrayList<>();

    }

    // Método que calcula atenuação do sinal ao longo da distância
    public ArrayList<Point> getPathLoss() {

       double[] attenuation = new double[numberPoints + 1]; //Cria um vetor para armazenar o valor encontrado de atenuação em cada ponto
        double rate = distancia / numberPoints; //rate é a lagura de um intervalo ou a razão  

        for (int i = 1; i < numberPoints + 1; i++) {
            double positionReceiver = i * rate; // retorna a posição do receptor em um dado instante
            //Calculo da atenuação em um ponto específico:
            double perda = (double) (69.55 + 26.16*Math.log10(Fc) - 13.82*Math.log10(Hte) + (44.9 - 6.55*Math.log10(Hte))*Math.log10(positionReceiver));
            double alfa =  (double) (1.1*Math.log10(Fc) - 0.7)*Hre - (1.56*Math.log10(Fc) - 0.8);
            attenuation [i] =  perda - alfa;
            //  perda = 69.55 + 26.16*log10(frequencia) - 13.82*log10(hte) + (44.9 - 6.55*log10(hte))*log10(distancia(k));         
            //  alfa = (1.1*log10(frequencia) - 0.7)*hre - (1.56*log10(frequencia) - 0.8);
            //  perda = perda - alfa;
            // Criando um objeto do tipo ponto e adiciona na lista de Pontos:
            Point ponto = new Point(positionReceiver, attenuation[i]);
            Points_HataModel.add(ponto);
        }
        return Points_HataModel;
    }

   

    @Override
    public ArrayList<Point> getPoints() {


            return getPathLoss();
        
    }

    /*@Override
     public ArrayList<Point> getPoints() {

     return getPathLoss();

     }*/
}
